package com.jsmtr.rms.controller;

import com.jsmtr.rms.entity.*;
import com.jsmtr.rms.service.*;
import com.jsmtr.rms.utils.EnumTools;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/Do/GXExam")
public class DoGxExamController {

    @Resource
    private IUtilService utilService;
    @Resource
    private IDoSZService szService;
    @Resource
    private IDoBSService bsService;
    @Resource
    private IDoResumeService doResumeService;
    @Resource
    private IProjectService projectService;


    //[start] 笔试管理
    @RequestMapping("/")
    public String Index(HttpServletRequest request, HttpServletResponse response, Model model) {
        try {
            model.addAttribute("path", request.getContextPath());
            String pid = request.getParameter("pid").trim();
            String fid = request.getParameter("fid").trim();
            String deptcode = request.getParameter("deptcode").trim();

            model.addAttribute("pid", pid);
            model.addAttribute("fid", fid);
            model.addAttribute("deptcode", deptcode);

            //名族
            model.addAttribute("minzu", utilService.optionList("B", "0"));
            //婚否
            model.addAttribute("hunfou", utilService.optionList("D", "0"));
            //政治面貌
            model.addAttribute("zzmm", utilService.optionList("E", "0"));
            //最高学历
            model.addAttribute("education", utilService.optionList("F", "0"));
            //专业技术职务类型
            model.addAttribute("posttype", utilService.optionList("I", "0"));
            //职业资格证
            model.addAttribute("jndj", utilService.optionList("O", "0"));
            //招聘岗位
            List<ProjectInfoJobs> projectJobs=utilService.getProjectJobs(pid);
            model.addAttribute("jobs",projectJobs);

           /* //招聘岗位
            List<ProjectInfoJobs> jobs = projectService.getjobsbypid(pid);
            StringBuilder dstr = new StringBuilder();
            for (ProjectInfoJobs job : jobs) {
                dstr.append("<option value='" + job.getJobname() + "'>" + job.getJobname() + "</option>");
            }
            model.addAttribute("jobs", dstr);*/

            List<DoBSRoom> rooms = bsService.getRooms();
            StringBuilder roomsb = new StringBuilder();
            roomsb.append("<option value=''>请选择</option>");
            for (DoBSRoom room : rooms) {
                roomsb.append("<option value='" + room.getId() + "'>" + room.getName() +"["+room.getAllcount()+"人]"+ "</option>");
            }
            model.addAttribute("room", roomsb);

            List<BaseConfig> _configs = utilService.getConfigs("dxmb");
            StringBuilder str = new StringBuilder();
            for (BaseConfig _config : _configs) {
                str.append("<option value='" + _config.getCode() + "'>" + _config.getName() + "</option>");
            }
            model.addAttribute("dxmb", str);

            //面试注意事项
            String bszysx=utilService.getConfig("bszysx");
            model.addAttribute("bszysx",bszysx);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "Do/GXCampus/Exam/index";
    }

    @SuppressWarnings("unchecked")
  /*  @RequestMapping("/getusers")
    public void getusers(HttpServletRequest request, HttpServletResponse response, DUserResume user) {
        try {
            int perpage = Integer.parseInt(request.getParameter("perpage"));
            int page = Integer.parseInt(request.getParameter("page"));
            String flowid = request.getParameter("flowid").trim();

            Map<String, Object> _map = new HashMap<String, Object>();
            _map.put("agefrom", request.getParameter("agefrom").trim());
            _map.put("ageto", request.getParameter("ageto").trim());
            _map.put("workyearfrom", request.getParameter("workyearfrom").trim());
            _map.put("workyearto", request.getParameter("workyearto").trim());
            _map.put("heightfrom", request.getParameter("heightfrom").trim());
            _map.put("heightto", request.getParameter("heightto").trim());
            _map.put("flowid", flowid);
            _map.put("bsresult", request.getParameter("bsresult").trim());
            _map.put("notice", request.getParameter("notice").trim());

            Map<String, Object> map = szService.getBSUsers(page, perpage, user, _map);
            StringBuilder result = new StringBuilder();
            double pageCount = (Double) map.get("pageCount");
            double allcount = (Double) map.get("count");

            if (pageCount != 0) {
               *//* Object object = map.get("list");
                for (Object[] _user : (List<Object[]>) object) {*//*
                List<HashMap> object = (List<HashMap>)map.get("list");
                for (HashMap<String,Object> _user :  object) {
                    //r.id,u.id,u.ticketnum,r.code,r.name,r.education,r.tel,
                    //u.kcname,u.zhszpoint,u.zhszresult,u.gxcppoint,u.gxcpresult,
                    //u.zycppoint,u.zycpresult,u.point,u.result,u.notice,r.fid,u.seatnum,r.fqstate,r.jname,u.op6,r.nrid,r.njname
                    result.append("<tr><td><input type='checkbox' id='cb_" + _user.get("ID") + "' value='" + _user.get("ID") + "' /></td>");
                   *//* result.append("<td>" + _user[3] + "</td>");
                    result.append("<td>" + _user[20] + "</td>");*//*
                    result.append("<td class='link'><a target='_blank' href='"
                            + request.getContextPath() + "/UserResume/ViewDResume?id="
                            + _user.get("ID") + "'>" + _user.get("NAME")
                            + "</a></td>");
                    result.append("<td>" + _user.get("CARDNO") + "</td>");
                    if(_user.get("EDUCATIONNAME")  == null)
                        result.append("<td></td>");
                    else
                        result.append("<td>" + _user.get("EDUCATIONNAME") + "</td>");
                    result.append("<td>" + _user.get("JNAME") + "</td>");
                    result.append("<td>" + _user.get("TEL") + "</td>");
                    result.append("<td>" + (_user.get("TICKETNUM")  == null ? "" : _user.get("TICKETNUM") ) + "</td>");
                    result.append("<td>" + (_user.get("SEATNUM")  == null ? "" : _user.get("SEATNUM") ) + "</td>");
                    result.append("<td>" + (_user.get("KCNAME") == null ? "" : _user.get("KCNAME")) + "</td>");
                    result.append("<td>" + (_user.get("ZHSZPOINT") == null ? "" : (_user.get("ZHSZPOINT")+ "(" + _user.get("ZHSZRESULT")) + ")") + "</td>");
                    result.append("<td>" + (_user.get("GXCPPOINT")== null ? "" : (_user.get("GXCPPOINT") + "(" + _user.get("GXCPRESULT"))+ ")") + "</td>");
//                    result.append("<td>" + (_user.get("ZYCPPOINT") == null ? "" : (_user.get("ZYCPPOINT") + "(" +_user.get("ZYCPRESULT"))+ ")") + "</td>");
//                    result.append("<td>" + (_user.get("POINT") == null ? "" : (_user.get("POINT") + "(" + _user.get("RESULT")) + ")") + "</td>");

                    result.append("<td>" + (_user.get("ZYCPPOINT") == null ? "" : (_user.get("ZYCPPOINT"))) + "</td>");
                    result.append("<td>" + (_user.get("RESULT") == null ? "" : (_user.get("RESULT"))) + "</td>");

                    result.append("<td>" + (_user.get("NOTICE") == null ? "" : EnumTools.NoticeState.values()[((BigDecimal) _user.get("NOTICE")).intValue()]) + "</td>");
                    result.append("<td>" + (_user.get("BSREMARK") == null ? "" :  _user.get("BSREMARK")) + "</td>");
                    if (_user.get("OP6") == null || _user.get("OP6").equals("未公布")) {
                        result.append("<td><input type='hidden' value='"+_user.get("MID")+"'>"+ (_user.get("MCONTENT") == null ? "" : _user.get("MCONTENT")) + "</td>");
                        result.append("<td class='true'><span>未公布</span></td>");
                    } else {
                        result.append("<td><input type='hidden' value='"+_user.get("MID")+"'>"+"最近登录："+ (_user.get("LOGINTIME")==null?"":_user.get("LOGINTIME").toString())+"<br/>个人情况：" + (_user.get("MCONTENT") == null ? "" : _user.get("MCONTENT")) + "</td>");
                        result.append("<td class='false'><span>已公布</span></td>");
                    }
                    if (_user.get("FQSTATE").equals("已放弃") && _user.get("FQFID").equals(flowid)) {
                        result.append("<td class='yfq'><span>已放弃</span></td></tr>");
                    } else {
                        if (_user.get("NRID") != null) {
                            result.append("<td class='ytj'><span title='" + _user.get("NJNAME") + "'>已推荐</span></td></tr>");
                        } else {
                            if (_user.get("RESULT") == null) {
                                result.append("<td class='true'><span>未完成</td></tr>");
                            } else {
                                if (_user.get("RESULT").equals("-")) {
                                    result.append("<td class='true'><span>未完成</td></tr>");
                                } else if (_user.get("RESULT").equals("未通过")||_user.get("RESULT").equals("未通过")||_user.get("RESULT").equals("不合格")||_user.get("RESULT").equals("推荐")) {
                                    result.append("<td class='false'><span>已完成</td></tr>");
                                } else {
                                    if (_user.get("FID").equals(flowid)) {
                                        if (_user.get("RESULT").equals("不通过")||_user.get("RESULT").equals("未通过")||_user.get("RESULT").equals("不合格")) {
                                            result.append("<td class='yfq'><span>不通过</td></tr>");
                                        }else {
                                            result.append("<td class='true'><span>未完成</td></tr>");
                                        }
                                    } else {
                                        result.append("<td class='false'><span>已完成</td></tr>");
                                    }
                                }
                            }
                        }
                    }
                }
            } else {
                result.append("<tr><td colspan='16'>未找到符合条件的数据</td></tr>");
            }
            result.append("<input type='hidden' id='pageCount' value='" + pageCount + "' />");
            result.append("<input type='hidden' id='allCount' value='" + allcount + "' />");
            utilService.printTextResult(result.toString(), response);
        } catch (Exception e) {
            e.printStackTrace();
            utilService.printTextResult("<tr><td colspan='16'>读取数据失败</td></tr><input type='hidden' id='pageCount' value='0' /><input type='hidden' id='allCount' value='0' />", response);
        }

    }
*/
    //[end]

    @ResponseBody
    @RequestMapping(value = "/getGxExamListLayuiJson", method = RequestMethod.GET)
    public LayuiDataTableResultBean getGxExamListLayuiJson(HttpServletRequest request, HttpServletResponse response, DUserResume user) {
        try {
            int page = Integer.parseInt(request.getParameter("page"));
            int limit = Integer.parseInt(request.getParameter("limit"));
            String flowid = request.getParameter("flowid").trim();

            Map<String, Object> _map = new HashMap<String, Object>();
            _map.put("agefrom", request.getParameter("agefrom").trim());
            _map.put("ageto", request.getParameter("ageto").trim());
            _map.put("workyearfrom", request.getParameter("workyearfrom").trim());
            _map.put("workyearto", request.getParameter("workyearto").trim());
            _map.put("heightfrom", request.getParameter("heightfrom").trim());
            _map.put("heightto", request.getParameter("heightto").trim());
            _map.put("flowid", flowid);
            _map.put("bsresult", request.getParameter("bsresult").trim());
            _map.put("notice", request.getParameter("notice").trim());

            Map<String, Object> map = szService.getBSUsers(page, limit, user, _map);
            double pageCount = (Double) map.get("pageCount");
            double allcount = (Double) map.get("count");

            JSONArray jsonArray = new JSONArray();
            int num = 1;
            if (pageCount != 0) {
               /* Object object = map.get("list");
                for (Object[] _user : (List<Object[]>) object) {*/
                List<HashMap> object = (List<HashMap>) map.get("list");
                for (HashMap<String, Object> _user : object) {
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("id_cb", "cb_" + _user.get("ID"));
                    jsonObject.put("id", limit * (page - 1) + num);
                    jsonObject.put("cardcount", Integer.parseInt(_user.get("CARDCOUNT").toString()));
                    jsonObject.put("ContextPath", request.getContextPath() + "/UserResume/ViewDResume?id=" + _user.get("ID"));
                    jsonObject.put("NAME", _user.get("NAME"));
                    jsonObject.put("CARDNO", _user.get("CARDNO"));
                    jsonObject.put("EDUCATIONNAME", (_user.get("EDUCATIONNAME") == null ? "" : _user.get("EDUCATIONNAME")));
                    jsonObject.put("JNAME", _user.get("JNAME"));
                    jsonObject.put("TEL", _user.get("TEL"));
                    jsonObject.put("TICKETNUM", (_user.get("TICKETNUM") == null ? "" : _user.get("TICKETNUM")));
                    jsonObject.put("SEATNUM", (_user.get("SEATNUM") == null ? "" : _user.get("SEATNUM")));
                    jsonObject.put("KCNAME", (_user.get("KCNAME") == null ? "" : _user.get("KCNAME")));
                    jsonObject.put("ZHSZPOINT", (_user.get("ZHSZPOINT") == null ? "" : _user.get("ZHSZPOINT")));
                    jsonObject.put("GXCPPOINT", (_user.get("GXCPPOINT") == null ? "" : _user.get("GXCPPOINT")));
                    jsonObject.put("ZYCPPOINT", (_user.get("ZYCPPOINT") == null ? "" : _user.get("ZYCPPOINT")));
                    jsonObject.put("RESULT", (_user.get("RESULT") == null ? "" : _user.get("RESULT")));
                    jsonObject.put("NOTICE", (_user.get("NOTICE") == null ? "" : EnumTools.NoticeState.values()[((BigDecimal) _user.get("NOTICE")).intValue()]) );
                    jsonObject.put("BSREMARK", (_user.get("BSREMARK") == null ? "" : _user.get("BSREMARK")));
                    jsonObject.put("MID", _user.get("MID"));
                    jsonObject.put("MCONTENT", (_user.get("MCONTENT") == null ? "" : _user.get("MCONTENT")));
                    if (_user.get("OP6") == null || _user.get("OP6").equals("未公布")) {
                        jsonObject.put("STATEa", (_user.get("MCONTENT") == null ? "" : _user.get("MCONTENT")));
                        jsonObject.put("STATEb", "未公布");
                    } else {
                        jsonObject.put("LOGINTIME", (_user.get("LOGINTIME")==null?"":_user.get("LOGINTIME").toString()));
                        jsonObject.put("STATEa", ("最近登录：" + (_user.get("LOGINTIME")==null?"":_user.get("LOGINTIME").toString()) + "<br/>个人情况：" + (_user.get("MCONTENT") == null ? "" : _user.get("MCONTENT"))));
                        jsonObject.put("STATEb","已公布");
                    }

                    jsonObject.put("FQSTATE", _user.get("FQSTATE"));
                    jsonObject.put("FQFID", _user.get("FQFID"));
                    jsonObject.put("NRID", _user.get("NRID"));
                    jsonObject.put("NJNAME", _user.get("NJNAME"));
                    if (_user.get("FQSTATE").equals("已放弃") && _user.get("FQFID").equals(flowid)) {
                        jsonObject.put("STATEc", "已放弃");
                    } else {
                        if (_user.get("NRID") != null) {
                            jsonObject.put("STATEc", "已推荐");
                        } else {
                            if (_user.get("RESULT") == null) {
                                jsonObject.put("STATEc", "未完成");
                            } else {
                                if (_user.get("RESULT").equals("-")) {
                                    jsonObject.put("STATEc", "未完成");
                                } else if (_user.get("RESULT").equals("未通过") || _user.get("RESULT").equals("未通过") || _user.get("RESULT").equals("不合格") || _user.get("RESULT").equals("推荐")) {
                                    jsonObject.put("STATEc", "已完成");
                                } else {
                                    if (_user.get("FID").equals(flowid)) {
                                        if (_user.get("RESULT").equals("不通过") || _user.get("RESULT").equals("未通过") || _user.get("RESULT").equals("不合格")) {
                                            jsonObject.put("STATEc", "不通过");
                                        } else {
                                            jsonObject.put("STATEc", "未完成");
                                        }
                                    } else {
                                        jsonObject.put("STATEc", "已完成");
                                    }
                                }
                            }
                        }
                    }
                    jsonObject.put("arrange", _user.get("BSARRANGE"));

                    jsonArray.add(jsonObject);
                    num++;
                }
            }

            LayuiDataTableResultBean result = new LayuiDataTableResultBean();
            result.setCode(0);
            result.setMsg("success");
            result.setCount((int) allcount);
            result.setData(jsonArray);

            return result;
        } catch (Exception e) {
            e.printStackTrace();

            LayuiDataTableResultBean result = new LayuiDataTableResultBean();
            result.setCount(-1);
            result.setMsg("err");
            return result;
        }
    }

    //[start] 流程扭转到下一步

    @SuppressWarnings({"rawtypes", "unchecked"})
    @RequestMapping(value = "/NextAction", method = RequestMethod.POST)
    public void NextAction(HttpServletRequest request, HttpServletResponse response) {
        try {
            String[] ids = request.getParameterValues("id");//人员信息ID
            if (ids != null) {
                String pid = request.getParameter("pid").trim();//招聘方案ID
                String fid = request.getParameter("fid").trim();//招聘流程ID
                String deptcode = request.getParameter("deptcode").trim();//责任部门编码
                BaseUser usr = utilService.getSessionUser(request);
                if (usr.getUdept().equals(deptcode)) {
                    //流程是否结束
                    if (utilService.FlowIsDoing(fid)) {
                        List editlist = new ArrayList();
                        List<DUserResume> users = szService.getResumes(ids);
                        ProjectInfoFlow nFlow = szService.getNextFlow(pid, deptcode, fid);

                        for (DUserResume user : users) {
                            if (user.getFid().equals(fid)
                                    && user.getFqstate().equals("未放弃")
                                    && user.getNrid() == null) {
                                DoBSUser bsuser = bsService.getBsUser(user.getId(), fid);
                                if (bsuser.getResult().equals("推荐")||bsuser.getResult().equals("通过")||bsuser.getResult().equals("已通过")||bsuser.getResult().equals("合格")||bsuser.getResult().equals("已合格")) {
                                    if((bsuser.getZhszresult().equals("合格")||(bsuser.getZhszresult().equals("通过")))&&
                                            ((bsuser.getGxcpresult().equals("匹配"))||(bsuser.getGxcpresult().equals("通过")))) {
                                        user.setFid(nFlow.getId());
                                        user.setPath(user.getPath() + nFlow.getId() + "/");
                                        editlist.add(user);
                                    }
                                }
                            }
                        }

                        if (editlist.size() > 0) {
                            nFlow.setState(EnumTools.PlanFlowState.进行中.ordinal());
                            editlist.add(nFlow);

                            utilService.editList(editlist);
                            utilService.printJsonResult(true, "操作成功！", "no", response);
                        } else {
                            utilService.printJsonResult(false, "当前选中的信息不能执行此操作！", "no", response);
                        }
                    } else {
                        utilService.printJsonResult(false, "当前流程不支持此操作！", "no", response);
                    }
                } else {
                    utilService.printJsonResult(false, "您无权执行此操作！", "no", response);
                }
            } else {
                utilService.printJsonResult(false, "请选择人员信息！", "no", response);
            }
        } catch (Exception e) {
            e.printStackTrace();
            utilService.printJsonResult(false, "操作失败！", "no", response);
        }
    }

    //[end]
}
